﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CI.Caja.BL;
using CI.Caja.BE;

namespace CI.Caja.MVC.Controllers
{
    public class ProgramacionTurnoController : Controller
    {

        //
        // GET: /ProgramacionTurno/
        public IBL_Programacion ProgramacionService { get; set; }
        public IBL_Dia DiaService { get; set; }
        public IBL_Turno TurnoService { get; set; }
        public IBL_PuntoVenta PtoVentaService { get; set; }
        public IBL_Personal PersonalService { get; set; }

        public ActionResult Index()
        {
            ICollection<BE_Programacion> modelo = ProgramacionService.ListarProgramacion();
            TempData["dias"] = ListarDias();
            return View(modelo);
        }

        
        //
        // GET: /ProgramacionTurno/Details/5

        public ActionResult Details(int id)
        {
            BE_Programacion modelo = ProgramacionService.ObtenerProgramacion(id);
            return View(modelo);
        }

        //
        // GET: /ProgramacionTurno/Create

        public ActionResult Create()
        {
            TempData["dias"] = ListarDias();
            TempData["turnos"] = ListarTurnos();
            TempData["ptoventas"] = ListarPtoVtas();
            TempData["personales"] = ListarPersonal();
                
            
            return View();
        } 

        //
        // POST: /ProgramacionTurno/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here
                if (ModelState.IsValid)
                {
                    string idprogramacion = ProgramacionService.ObtenerCodigo();
                    //string fecinicio =String.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(collection["FecInicio"]));
                    //string fecfin = String.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(collection["FecFin"]));
                    string fecinicio = ProgramacionService.ConvertDate((string)collection["FecInicio"]);
                    string fecfin = ProgramacionService.ConvertDate((string)collection["FecFin"]);

                    if (Convert.ToDateTime(fecfin) < Convert.ToDateTime(fecinicio))
                    {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha inicio");
                    }
                    if (Convert.ToDateTime(fecfin) < DateTime.Now) {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha actual");
                    }
                    //string fecfin = (string)collection["FecFin"];

                    

                    if (collection["CodigoTurno"] == null || collection["CodigoTurno"] == string.Empty)
                        throw new Exception("Seleccione un Turno");
                    int idTurno = int.Parse(collection["CodigoTurno"]);

                    if (collection["CodigoPersonal"] == null || collection["CodigoPersonal"] == string.Empty)
                        throw new Exception("Seleccione un Personal");
                    int idPersonal = int.Parse(collection["CodigoPersonal"]);

                    if (collection["CodigoDia"] == null || collection["CodigoDia"] == string.Empty)
                        throw new Exception("Seleccione un Dia");
                    int idDia = int.Parse(collection["CodigoDia"]);

                    if (collection["CodigoPtoVta"] == null || collection["CodigoPtoVta"] == string.Empty)
                        throw new Exception("Seleccione un Punto Venta");
                    int idPtoVta = int.Parse(collection["CodigoPtoVta"]);

                    if (ProgramacionService.ValidaDuplicado(fecinicio,fecfin,idPersonal,idDia)!= 0)
                    {
                        throw new Exception("El personal no puede tener mas de un turno por día");
                    }

                    //ProgramacionService.RegistrarProgramacion(idpersonal, nombre, apellido, idCargo);
                    ProgramacionService.RegistrarProgramacion(idprogramacion, fecinicio, fecfin, idTurno, idPersonal, idDia, idPtoVta);
                    return RedirectToAction("Index");
                }
                else
                {
                    return View();
                }



                //return RedirectToAction("Index");
            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                TempData["dias"] = ListarDias();
                TempData["turnos"] = ListarTurnos();
                TempData["ptoventas"] = ListarPtoVtas();
                TempData["personales"] = ListarPersonal();
                return View();
            }
        }
        
        //
        // GET: /ProgramacionTurno/Edit/5
 
        public ActionResult Edit(int id)
        {
            BE_Programacion modelo = ProgramacionService.ObtenerProgramacion(id);
            TempData["dias"] = ListarDias(modelo.Dia.IdDia);
            TempData["turnos"] = ListarTurnos(int.Parse(modelo.IdTurno));
            TempData["ptoventas"] = ListarPtoVtas(modelo.Ptoventa.IdPuntoVenta);
            TempData["personales"] = ListarPersonal(int.Parse(modelo.IdPersonal));
            return View(modelo);
        }

        //
        // POST: /ProgramacionTurno/Edit/5

        [HttpPost]
        public ActionResult Edit(string id, FormCollection collection)
        {
            try
            {
                // TODO: Add update logic here
  // TODO: Add insert logic here
                // TODO: Add insert logic here
                if (ModelState.IsValid)
                {
                    //string idprogramacion = ProgramacionService.ObtenerCodigo();
                    //string fecinicio =String.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(collection["FecInicio"]));
                    string fecinicio = ProgramacionService.ConvertDate((string)collection["FecInicio"]);
                    string fecfin = ProgramacionService.ConvertDate((string)collection["FecFin"]);
                    //string fecfin = (string)collection["FecFin"];
                    //string fecfin = String.Format("{0:yyyy-MM-dd}", Convert.ToDateTime(collection["FecFin"]));

                    if (Convert.ToDateTime(fecfin) < Convert.ToDateTime(fecinicio))
                    {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha inicio");
                    }
                    if (Convert.ToDateTime(fecfin) < DateTime.Now)
                    {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha actual");
                    }

                    if (collection["CodigoTurno"] == null || collection["CodigoTurno"] == string.Empty)
                        throw new Exception("Seleccione un Turno");
                    int idTurno = int.Parse(collection["CodigoTurno"]);

                    if (collection["CodigoPersonal"] == null || collection["CodigoPersonal"] == string.Empty)
                        throw new Exception("Seleccione un Personal");
                    int idPersonal = int.Parse(collection["CodigoPersonal"]);

                    if (collection["CodigoDia"] == null || collection["CodigoDia"] == string.Empty)
                        throw new Exception("Seleccione un Dia");
                    int idDia = int.Parse(collection["CodigoDia"]);

                    if (collection["CodigoPtoVta"] == null || collection["CodigoPtoVta"] == string.Empty)
                        throw new Exception("Seleccione un Punto Venta");
                    int idPtoVta = int.Parse(collection["CodigoPtoVta"]);

                    if (Convert.ToDateTime(fecfin) < Convert.ToDateTime(fecinicio))
                    {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha inicio");
                    }
                    if (Convert.ToDateTime(fecfin) < DateTime.Now)
                    {
                        throw new Exception("La fecha Fin no puede ser menor a la fecha actual");
                    }

                    //ProgramacionService.RegistrarProgramacion(idpersonal, nombre, apellido, idCargo);
                    ProgramacionService.ActualizarProgramacion(id, fecinicio, fecfin, idTurno, idPersonal, idDia, idPtoVta);
                    return RedirectToAction("Index");
                }
                else
                {
                    return View();
                }

            }
            catch (Exception ex)
            {
                ModelState.AddModelError(String.Empty, ex.Message);
                BE_Programacion modelo = ProgramacionService.ObtenerProgramacion(Convert.ToInt32(id));
                TempData["dias"] = ListarDias(modelo.Dia.IdDia);
                TempData["turnos"] = ListarTurnos(int.Parse(modelo.IdTurno));
                TempData["ptoventas"] = ListarPtoVtas(modelo.Ptoventa.IdPuntoVenta);
                TempData["personales"] = ListarPersonal(int.Parse(modelo.IdPersonal));
                return View(modelo);
            }
        }

        //
        // GET: /ProgramacionTurno/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /ProgramacionTurno/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        private ICollection<SelectListItem> ListarDias()
        {
            ICollection<SelectListItem> Dias = new List<SelectListItem>();
            Dias.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Dia dia in DiaService.ListarDia())
                Dias.Add(new SelectListItem() { Value = dia.IdDia.ToString(), Text = dia.TxtNomDia });
            return Dias;

        }
        private ICollection<SelectListItem> ListarDias(int idDia)
        {
            ICollection<SelectListItem> Dias = new List<SelectListItem>();
            Dias.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Dia dia in DiaService.ListarDia())
                if (dia.IdDia == idDia)
                {
                    Dias.Add(new SelectListItem() { Value = dia.IdDia.ToString(), Text = dia.TxtNomDia,Selected=true });
                }
                else {
                    Dias.Add(new SelectListItem() { Value = dia.IdDia.ToString(), Text = dia.TxtNomDia });
                }
               
            return Dias;
        }
        private ICollection<SelectListItem> ListarTurnos()
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Turno turno in TurnoService.ListarTurno())
                Turnos.Add(new SelectListItem() { Value = turno.IdTurno.ToString(), Text = turno.DescripTurno });
            return Turnos;

        }
        private ICollection<SelectListItem> ListarTurnos(int idTurno)
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Turno turno in TurnoService.ListarTurno())
                if (turno.IdTurno == idTurno.ToString())
                {
                    Turnos.Add(new SelectListItem() { Value = turno.IdTurno.ToString(), Text = turno.DescripTurno,Selected=true });
                }
                else
                {
                    Turnos.Add(new SelectListItem() { Value = turno.IdTurno.ToString(), Text = turno.DescripTurno });
                }
                
            return Turnos;

        }
        private ICollection<SelectListItem> ListarPtoVtas()
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_PuntoVenta turno in PtoVentaService.ListarPtoVenta())
                Turnos.Add(new SelectListItem() { Value = turno.IdPuntoVenta.ToString(), Text = turno.Descripcion });
            return Turnos;
        }
        private ICollection<SelectListItem> ListarPtoVtas(int idPtoVta)
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_PuntoVenta turno in PtoVentaService.ListarPtoVenta())
                if (turno.IdPuntoVenta == idPtoVta)
                {
                    Turnos.Add(new SelectListItem() { Value = turno.IdPuntoVenta.ToString(), Text = turno.Descripcion,Selected=true });
                }
                else {
                    Turnos.Add(new SelectListItem() { Value = turno.IdPuntoVenta.ToString(), Text = turno.Descripcion });
                }

                
            return Turnos;
        }
        private ICollection<SelectListItem> ListarPersonal()
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Personal turno in PersonalService.ListarPersonal())
                Turnos.Add(new SelectListItem() { Value = turno.IdPersonal.ToString(), Text = turno.Nombre + " " + turno.Apellido });
            return Turnos;
        }
        private ICollection<SelectListItem> ListarPersonal(int idPersonal)
        {
            ICollection<SelectListItem> Turnos = new List<SelectListItem>();
            Turnos.Add(new SelectListItem() { Value = string.Empty, Text = "Seleccione..." });
            foreach (BE_Personal turno in PersonalService.ListarPersonal())
                if (turno.IdPersonal == idPersonal.ToString())
                {
                    Turnos.Add(new SelectListItem() { Value = turno.IdPersonal.ToString(), Text = turno.Nombre + " " + turno.Apellido,Selected=true });
                }
                else {
                    Turnos.Add(new SelectListItem() { Value = turno.IdPersonal.ToString(), Text = turno.Nombre + " " + turno.Apellido });
                }
                
            return Turnos;
        }

    }
}
